package com.gugee.ins.common.beanutil;

import com.gugee.ins.common.model.mysql.media.InsMedia;
import com.gugee.ins.common.model.spider.app.InsAppImageVersion;
import com.gugee.ins.common.model.spider.app.media.InsAppMediaBody;


/**
 * 转换生成 InsMedia 类
 * @author Huang xin
 */
public class InsAppMediaConversion {

    private InsAppMediaConversion(){

    }

    public static InsMedia mapper(InsAppMediaBody dto) {
        if (dto == null) {
            return null;
        } else {
            InsMedia insMedia = new InsMedia();

            insMedia.setMid(dto.getMid());
            insMedia.setOwnerUid(getOwnerUid(dto));
            insMedia.setShortcode(dto.getShortcode());
            insMedia.setDisplayUrl(getDisplayUrl(dto));
            insMedia.setIsVideo(dto.getMediaType() == 2);
            insMedia.setVideoUrl(getVideoUrl(dto));
            insMedia.setVideoViewCount(dto.getVideoViewCount());
            insMedia.setCaption(getCaption(dto));
            insMedia.setCommentCount(getEdgeMediaToCommentCount(dto));
            insMedia.setLikeCount(getEdgeMediaPreviewLikeCount(dto));
            insMedia.setCommentsDisabled(dto.isCommentsDisabled());
            insMedia.setTakenTime(dto.getTakenTime());
            insMedia.setLocationId(getLocationId(dto));
            insMedia.setLocationName(getLocationName(dto));
            insMedia.setTypename(dto.getMediaType() + "");
            insMedia.setProductType(dto.getProductType());
            insMedia.setVideoDuration(dto.getVideoDuration());
            insMedia.setVideoPlayCount(dto.getVideoPlayCount());

            return insMedia;
        }
    }

    private static long getEdgeMediaPreviewLikeCount(InsAppMediaBody insAppMediaBody) {
        if (insAppMediaBody == null || insAppMediaBody.getLikeCount() == null) {
            return 0L;
        }
        return insAppMediaBody.getLikeCount();
    }

    private static int getEdgeMediaToCommentCount(InsAppMediaBody insAppMediaBody) {
        if (insAppMediaBody == null || insAppMediaBody.getCommentCount() == null) {
            return 0;
        }
        return insAppMediaBody.getCommentCount();
    }

    public static long getOwnerUid(InsAppMediaBody dto) {
        if (dto.getUser() == null || dto.getUser().getUid() == null) {
            return 0L;
        }
        return dto.getUser().getUid();
    }

    public static String getCaption(InsAppMediaBody dto) {
        if (dto.getCaption() != null) {
            return dto.getCaption().getText();
        }
        return null;
    }

    public static String getLocationName(InsAppMediaBody dto) {
        if (dto.getLocation() != null) {
            return dto.getLocation().getName() ;
        }
        return null;
    }

    public static Long getLocationId(InsAppMediaBody dto) {
        if (dto.getLocation() != null && dto.getLocation().getId() > 0) {
            return dto.getLocation().getId();
        }
        return null;
    }

    public static String getDisplayUrl(InsAppMediaBody dto) {
        if (dto.getImageVersions() != null ) {
            return getImageUrl(dto.getImageVersions());
        } else if(dto.getMediaType() == 8 && dto.getCarouselMedia() != null
                && !dto.getCarouselMedia().isEmpty() && dto.getCarouselMedia().get(0) != null
                && dto.getCarouselMedia().get(0).getImageVersions() != null){
            return getImageUrl(dto.getCarouselMedia().get(0).getImageVersions());
        }
        return null;
    }

    public static String getImageUrl(InsAppImageVersion insAppImageVersion){
        if (insAppImageVersion.getCandidates() != null
                && !insAppImageVersion.getCandidates().isEmpty()
                && insAppImageVersion.getCandidates().get(0) != null) {
            return insAppImageVersion.getCandidates().get(0).getUrl();
        }
        return null;
    }

    public static String getVideoUrl(InsAppMediaBody dto) {
        if (dto.getVideoVersions() != null && !dto.getVideoVersions().isEmpty() && dto.getVideoVersions().get(0) != null) {
            return dto.getVideoVersions().get(0).getUrl();
        }
        return null;
    }
}
